//进行axios的二次封装：使用请求和响应拦截器
import axios from 'axios'
import { ElMessage } from 'element-plus'
//利用axios的create方法创建实例对象
const request = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 5000, //发送的这个请求必须在5s之类搞定
})

request.interceptors.request.use((config) => {
  console.log(config, 'config')
  //config的header请求头，通常给服务端携带请求参数比如config.header.token = '123'
  //注意一定要返回config否则请求发不出去
  return config
})
//拦截器有成功的回调也有失败的回调：两个
request.interceptors.response.use(
  //成功的回调
  (response) => {
    //简化数据
    console.log(response, 'response')
    return response.data
  },
  //失败的回调：处理http的网络错误
  (error) => {
    console.log(error, 'error')
    let message = ''
    const status = error.response.status
    switch (status) {
      case 401:
        message = 'TOKEN过期'
        break
      case 403:
        message = '无权访问'
        break
      case 404:
        message = '请求地址错误'
        break
      case 500:
        message = '服务器出错'
        break
      default:
        message = '网络出错'
        break
    }
    ElMessage({
      type: error,
      message,
    })
    //最后需要返回失败的回调
    return Promise.reject(error)
  },
)

//对外暴露
export default request
